package data;

import java.util.Calendar;
import java.util.Objects;
import util.Util;

public class Empregado extends Pessoa
{
	public static final int			IDADE_MINIMA_ADMISSAO = 18;
	public static final int			TAMANHO_CPF = 11;
	public static final Dinheiro	SALARIO_MAXIMO = new Dinheiro( 100000,0 );
	public static final Dinheiro	SALARIO_MINIMO = new Dinheiro( 500,0 );
	
	private Dinheiro salario;
	private Calendar dataAdmissao;
	private Calendar dataDesligamento;

	public Empregado(){}

	public Empregado( String cpf, 
					  String nome, 
					  Sexo sexo, 
					  Calendar dataNascimento, 
					  Dinheiro salario, 
					  Calendar dataAdmissao, 
					  Calendar dataDesligamento ) 
	{
		super(cpf, nome, sexo, dataNascimento);
		this.salario = salario;
		this.dataAdmissao = dataAdmissao;
		this.dataDesligamento = dataDesligamento;
	}

	public Calendar getDataAdmissao() {
		return dataAdmissao;
	}

	public void setDataAdmissao(Calendar dataAdmissao) {
		this.dataAdmissao = dataAdmissao;
	}

	public Calendar getDataDesligamento() {
		return dataDesligamento;
	}

	public void setDataDesligamento(Calendar dataDesligamento) {
		this.dataDesligamento = dataDesligamento;
	}

	public Dinheiro getSalario() {
		return salario;
	}

	public void setSalario(Dinheiro salario) {
		this.salario = salario;
	}

	public int getIdade() {
		return( Util.getDiferencaEmAnos( dataNascimento, Util.getDataAtual() ) );
	}

	@Override
	public boolean equals(Object obj)
	{
		if( this == obj )
			return true;
		if( obj == null )
			return false;
		if( getClass() != obj.getClass() )
			return false;
		if( !super.equals(obj) )
			return false;
		
		final Empregado other = (Empregado) obj;

		if( !Objects.equals(this.salario, other.salario) )
			return false;
		
		if( !Objects.equals(this.dataAdmissao, other.dataAdmissao) )
			return false;
		
		if( !Objects.equals(this.dataDesligamento, other.dataDesligamento) )
			return false;
		
		return true;
	}

	@Override
	public int hashCode() {
		int hash = 7;
		hash = 83 * hash + Objects.hashCode(this.salario);
		hash = 83 * hash + Objects.hashCode(this.dataAdmissao);
		hash = 83 * hash + Objects.hashCode(this.dataDesligamento);
		return hash;
	}
}